본문 바로가기

Windows/MFC 강좌 & Tips12

[다이얼로그 배경색 지우기] OnEraseBkgnd 와 OnCtlColor 다이얼로그의 배경 색을 바꾸는 예제는 아래와 같다 BOOL MainWnd::OnEraseBkgnd(CDC* pDC) { CRect r; GetClientRect(r); // 배경색을 파란색으로 변경한다. 흰색은 RGB(255,255,255) pDC->FillSolidRect(r, RGB(0,0,255)); return TRUE; } 문제는 OnCtlColor 에서도 마지막 매개변수인 nCtlColor 값을 CTLCOLOR_DLG 로 설정하면 다이얼로그 배경색을 바꿀 수 있는데, OnEraseBkgnd 함수를 호출하는 메시지 WM_ERASEBKGND 의 정의 : 창 배경을 지워야 함을 나타냅니다. OnCtlColor 함수를 호출하는 메시지 WM_CTLCOLOR 의 정의 : 컨트롤이 그려지려고 함을 나타냅니.. 2020. 8. 8.
(2) MFC 초기화 함수 : InitInstance, OnInitDialog CMFCApplication1App::InitInstance 함수 InitInstance 함수는 이 프로세스의 초기화 함수 입니다. CMFCApplication1App이 상속받고 있는 CWinApp의 InitInstance 함수를 호출합니다. 이 프로세스의 초기화 루틴에서 해야할 동작들은 CWinApp의 InitInstance 함수에 이 프로세스의 초기화 루틴들이 이미 있어요. 내가 만드는 프로그램은 이 함수를 호출해주기만 하면 됩니다. 그리고나서 InitInstance 함수 밑에보시면 CMFCApplication1Dlg 의 인스턴스를 생성해서 아직까지 뭔지는 몰라도 DoModal이라는 함수를 호출해주고 있죠. 이 프로세스에서 윈도우를 생성해주는 부분이라고 생각하시면 됩니다. CMFCApplication.. 2020. 8. 8.
(1) MFC 시작하기 MFC 가 뭔지는 모르겠지만 윈도우에서 UI가 있는 프로그램을 만들기 위해 이 글을 읽고 계실거라 생각합니다. MFC 란 무엇인지? 에 대해서는 구글링하면 정의가 아주 많이 나와있어요. 이 글을 보고 있는 분들은 MFC가 무엇인지 보다는, MFC 라이브러리를 이용해서 프로그램을 어떻게 만드는지, Visual Studio로 MFC 프로젝트 생성은 했는데 도대체 여기 있는 소스들이 뭘 의미하는지, 어디서부터 뭘 해야할지 모르겠어서 찾아보는 분들일 거라 추측합니다. (제가 그랬거든요) 각설하고, 짧고 굵게 본론만 설명합니다. 더보기 참고로 Visual Studio 안깔려 있으시면 이 글을 참조하시면 됩니다. C++ 개발자를 위한 Visual Studio 설치하는 방법 2020/08/08 - [Dev Notes.. 2020. 8. 8.
CString 함수 AfxExtractSubString / strtok, strtok_s, wcstok_s AfxExtractSubString 함수 사용 시 메모리 부족 오류 나는 현상 if( AfxExtractSubString(szTmpBuffOne, szTmpBuff, i, '\n') ) 여기서 szTmpBuff는 사용자에게 입력받은 경로 값-> 경로 길이가 너무 길어서 함수 내부에서 Exception 발생, 디버그로 돌리면 '메모리가 부족합니다'라는 오류 메시지 출력 따라서 그냥 메모리 힙 잡아서 구분자 사용하려고 수정 char str[] = "My name is Hong Gil Dong";char *pToken = NULL;char *pSeparator = " "; // 구분자 /* 첫번째 수행시에" " 구분자로 자른 후 My 라는 문자열을 리턴합니다. 정확히 얘기하면 주소값을 리턴합니다. 나머지 na.. 2018. 2. 19.
Dialog에서 툴바 생성 설명 출처 블로그에 들어가면 자세하게 나와있지만MFC에서 ToolBar(도구모음)를 생성하는 방법은 Frame 기반 MFC 프로젝트에서와 Dialog 기반 MFC 프로젝트에서 다르다. 나는 다이얼로그 기반에서 ToolBar를 생성해서 붙여줬다. 툴바를 붙이고자하는 Dlg.cpp의 OnInitDialog에서 InitToolBar() 를 호출 BOOL CTest2Dlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(ID.. 2017. 8. 23.
UpdateData 함수 UpdateData ( TRUE ) 함수컨트롤 윈도우와 특정 변수 간의 정보교환이 일어나게 하는 함수로, UpdateData( ) 로 선언하면 디폴트로 인수가 TRUE로 지정. 인수가 TRUE 인 경우에는 컨트롤 윈도우에 있는 값이 변수로 들어오고, 인수가 FALSE인 경우에는 변수에 저장되어 있는 값이 컨트롤 윈도우에 출력 됨. 예를 들어, EditText에 사용자가 입력한 값을 EditText에 지정한 변수 CString strText로 받아서 처리하고자 할 때, UpdateData( ); 를 선언하면 strText에 현재 사용자가 입력한 값이 저장된다. 2017. 1. 4.